package com.yc.common.enums;

/**
 * 密码错误类型枚举
 *
 * @Author YanChen
 * @Date 2025/4/24 15:25
 */
public enum PasswordErrorType {

    /** 密码不正确 */
    INCORRECT("PASSWORD_INCORRECT", "密码不正确"),

    /** 密码已过期 */
    EXPIRED("PASSWORD_EXPIRED", "密码已过期，请修改密码"),

    /** 密码不符合规则 */
    INVALID_FORMAT("PASSWORD_INVALID_FORMAT", "密码不符合规则"),

    /** 密码与用户名相似 */
    SIMILAR_TO_USERNAME("PASSWORD_SIMILAR_TO_USERNAME", "密码不能与用户名相似"),

    /** 密码与历史密码重复 */
    HISTORY_REUSE("PASSWORD_HISTORY_REUSE", "密码不能与历史密码重复"),

    /** 密码尝试次数过多 */
    ATTEMPTS_EXCEEDED("PASSWORD_ATTEMPTS_EXCEEDED", "密码尝试次数过多，账号已锁定"),

    /** 首次登录必须修改密码 */
    FIRST_LOGIN("PASSWORD_FIRST_LOGIN", "首次登录必须修改密码"),

    /** 密码强度不足 */
    WEAK("PASSWORD_WEAK", "密码强度不足，请使用更复杂的密码"),

    /** 其他错误 */
    OTHER("PASSWORD_ERROR", "密码错误");

    private final String code;
    private final String message;

    PasswordErrorType(String code, String message) {
        this.code = code;
        this.message = message;
    }

    /**
     * 获取错误代码
     *
     * @return 错误代码
     */
    public String getCode() {
        return code;
    }

    /**
     * 获取错误消息
     *
     * @return 错误消息
     */
    public String getMessage() {
        return message;
    }

    /**
     * 根据代码获取错误类型
     *
     * @param code 错误代码
     * @return 错误类型
     */
    public static PasswordErrorType getByCode(String code) {
        for (PasswordErrorType type : PasswordErrorType.values()) {
            if (type.getCode().equals(code)) {
                return type;
            }
        }
        return OTHER;
    }
}